﻿#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<string>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
#include<Windows.h>
#include<locale.h>
using namespace std;

#define WIDTH 100
#define HEIGHT 40

//地图大小
#define X 60
#define Y 34

#define BODY L'●'
#define FOOD L'○'
#define WALL L'□'

typedef enum Game_Status
{
	OK,
	End_Normal,
	Kill_By_Wall,
	Kill_By_Self
}status;

typedef enum DIRECTION
{
	UP,
	DOWN,
	LEFT,
	RIGHT
}direction;

typedef struct SnackNode
{
	int x;
	int y;

	struct SnackNode* next;
}snacknode;

typedef struct Snack
{
	//蛇头
	snacknode* _pshead;
	//食物指针
	snacknode* _pfood;
	//游戏状态
	status _sta;
	//移动方向
	direction dir;
	//移动速递
	int sleep_time;
	//食物权重
	int food_weight;
	//总分
	int score;
}snack;



//设置游戏界面大小和本地模式以及光标显示
void SetInterface();

//设置光标坐标
void SetPos(short x, short y);

//游戏开始
void Game_Start(snack* ps);

//游戏开始界面设置
void WelcomeToGame();

//地图
void CreateMap();

//打印提示信息
void Help_Info();

//蛇的初始化创建
void Create_Snack(snack* ps);

//创建一个食物
void Create_Food(snack* ps);

//打印蛇
void Print_Snack(snack* ps);

//游戏运行
void Game_Run(snack* ps);

//暂停游戏
void Pause();

//蛇的移动
void snack_move(snack* ps);

//游戏结束
void Game_Over(snack*ps);

//撞到自己
void KillBySelf(snack* ps);

//撞到墙
void KillByWall(snack* ps);

//吃食物
void Eat_Food(snack* ps, snacknode** pn);

//非吃食物
void Not_Eat_Food(snack* ps, snacknode** pn);